获取TaoBao上4000+条的口红数据,我发现了…
大家好,我是Peter~
最近终于对口红下手啦~从网上获取到了4000+多条的口红数据,进行了数据处理和分析工作,简直是发现了新大陆!
想知道这张图是什么意思吗?请一定要看完全文~
导入库
import pandas as pd
import numpy as np
import re
import jieba
# 显示所有列
# pd.set_option('display.max_columns', None)
# 显示所有行
# pd.set_option('display.max_rows', None)
# 设置value的显示长度为100,默认为50
# pd.set_option('max_colwidth',100)
# 绘图相关
import matplotlib.pyplot as plt
from pyecharts.globals import CurrentConfig, OnlineHostType # 事先导入,防止不出图
from pyecharts import options as opts # 配置项
from pyecharts.charts import Bar, Scatter, Pie, Line,Map, WordCloud, Grid, Page # 各个图形的类
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ThemeType,SymbolType
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots # 画子图
数据信息
数据来自淘气的宝宝tb,主要是爬取了5个字段信息:
价格 店铺 发货地 付款人数 描述信息
通过导入数据,发现最终是4450条:
数据探索
查看下数据的基本信息:数据大小、缺失值、数据类型
数据预处理
预处理工作主要是针对购买人数和发货地两个字段信息进行:
1、购买人数
原始的购买人数是一个字符类型的数据,每个后面带有“人付款”,部分还有“+”。
我们处理数值型的数据,缺失值用0代替:
df["人数"] = df["人数"].fillna("0人付款",inplace=False) # 缺失值处理
def change_buy_people(x):
if "+" in "x":
return x.split("+")[0]
elif "付款" in x:
return x.split("人")[0]
df["人数"] = df["人数"].apply(change_buy_people)
df
第二步是去掉+号:
第三步:处理带有万的数据
得到最终的结果!!!
2、处理发货地
如果是国内的省份和市,进行切割处理。发货地中存在外国的国家,比如:美国、韩国等
df["发货地"] = df["发货地"].fillna("无信息",inplace=False)
df["省_国家"] = df["发货地"].apply(lambda x: x.split(" ")[0] if " " in x else x)
df["市"] = df["发货地"].apply(lambda x: x.split(" ")[1] if " " in x else x)
df.head()
上面就是处理数据的全部过程,你看懂了吗?
数据分析
数据分析不展示具体的数据处理过程,主要是展示结果:
店铺数量分析 价格分析 购买人数分析 发货地分析 描述词云图
店铺数量分析
查看我们获取到的数据中店铺的数量分布情况,我们取出前30名:
天猫国际相关的店铺最多 品牌方面:屈臣氏的最多
通过店铺的占比显示:仍然是天猫的店铺是最多的
价格分析
口红的价格是有高有低的,我们首先看下具体的数值情况:
均价在165元!真的假的呀? 数据中单价最高在6160元!!!真踏马贵呀😅
通过小提琴图看下数据分布:果然最高值6160很离谱!
看下不同店铺的价格分布图:我们找到了最贵的那个店铺
Christian louboutin:中文名为女王权杖,最高逼格的口红~
下面的图片来自官网,看上去就很贵呀~咱就不点进去瞧啦
付款人数分析
每个店铺的口红都有自己的付款人数。首先看看数据的整体情况:
结论:
平均付款人数在1220,也不知道是高还是低?应该不低了吧? 店铺最多的付款在35万,厉害呀!
我们看看数据的分布情况:付款人数非常多的店铺毕竟是少数
店铺的付款人数分析
下图显示的是不同店铺的口红付款人数,我们发现:
完美日记的旗舰店是最多的,挺火的 mac、colorkey、3ce的国外品牌的旗舰店付款人数也很多 当我们计算每个店铺的平均付款人数,colorkey去是第一名
上面的图形显示的每个店铺的付款人数
下面的图形显示的是每个店铺的平均付款人数
品牌介绍:
1、colorkey珂拉琪,美尚(广州)化妆品股份有限公司的旗下彩妆品牌。产品包括面部、眼部、唇部、卸妆产品、美妆工具和香水等品类。
2、完美日记Perfect Diary:广州逸仙电子商务有限公司,完美日记致力于探索欧美时尚趋势,同时结合亚洲人群的面部和肌肤特点,用心为新生代女性研发一系列高品质、精设计、易上手的彩妆产品。
3、花西子:花西子是浙江宜格企业管理集团有限公司在国家商标总局注册的彩妆类品牌。针对东方女性的肤质特点与妆容需求,以花卉精华与中草药提取物为核心成分,运用现代彩妆研发制造工艺,打造健康、养肤、适合东方女性使用的彩妆产品(来自百度百科和维基百科)
前两个都是广州的本土品牌,广州本身化妆美容产业就发达,第三个是杭州的品牌。
发货地分析
上面的图形是针对国内的发货地,数据和地图中的颜色分布也显示广东、浙江和上海的发货地是最多的
下面的图形包含了所有出现的发货地,例如国外的美国、日韩等。主要还以广东、上海、浙江、江苏等地区发货的店铺最多
描述词云图
将描述的文本信息绘制成词云图:
我们在看下前50个词的效果:口红、哑光、保湿、唇膏、正品等词语都是店铺中出现的高频词
口红品牌数量分析
对应每个店铺的描述信息中的品牌:
x_data = df9["index"].tolist()[:20]
y_data = df9["品牌"].tolist()[:20]
c = (
Pie(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))
.add("",
[list(z) for z in zip(x_data, y_data)])
.set_global_opts(
title_opts=opts.TitleOpts(title="口红品牌数量"),
legend_opts=opts.LegendOpts(type_="scroll", pos_left="90%", orient="vertical"),
)
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
c.render_notebook()
总结
这次数据分析的工作真的是又长见识了:
数据的爬取学习到了新知识,数据处理也用了新的方法 最重要的是对口红有了一个更深的认识,居然有这么多的品牌!!!
最后,给大家分享一个网站,也是Peter无意中在GitHub上发现的:http://zhangwenli.com/lipstick/?ref=home2019
这是一个博主做的口红可视化的网站,在网站上我们可以看到很多品牌的口红色系,感兴趣的可以玩玩~文章开头就是这个网站的图。如果你或者你的女朋友找不到色系,可以来这里看看
点击其中某个色系进行查看 左上角的具体信息会显示
推荐阅读
尤而小屋,一个温馨的小屋。小屋主人,一手代码谋求生存,一手掌勺享受生活,欢迎你的光临